package com.ruoyi.tzai.service;

import java.util.List;
import com.ruoyi.tzai.domain.TaskQueue;
import com.ruoyi.tzai.domain.TaskStep;

/**
 * 任务队列Service接口
 * 
 * @author tzai
 * @date 2025-11-12
 */
public interface ITaskQueueService 
{
    /**
     * 查询任务队列
     * 
     * @param taskId 任务队列主键
     * @return 任务队列
     */
    public TaskQueue selectTaskQueueByTaskId(Long taskId);

    /**
     * 查询任务队列列表
     * 
     * @param taskQueue 任务队列
     * @return 任务队列集合
     */
    public List<TaskQueue> selectTaskQueueList(TaskQueue taskQueue);

    /**
     * 新增任务队列
     * 
     * @param taskQueue 任务队列
     * @return 结果
     */
    public int insertTaskQueue(TaskQueue taskQueue);

    /**
     * 修改任务队列
     * 
     * @param taskQueue 任务队列
     * @return 结果
     */
    public int updateTaskQueue(TaskQueue taskQueue);

    /**
     * 批量删除任务队列
     * 
     * @param taskIds 需要删除的任务队列主键集合
     * @return 结果
     */
    public int deleteTaskQueueByTaskIds(Long[] taskIds);

    /**
     * 删除任务队列信息
     * 
     * @param taskId 任务队列主键
     * @return 结果
     */
    public int deleteTaskQueueByTaskId(Long taskId);

    /**
     * 创建任务
     * 
     * @param articleId 文章ID
     * @param configJson 任务配置JSON
     * @return 任务ID
     */
    public Long createTask(Long articleId, String configJson);

    /**
     * 提交任务到队列
     * 
     * @param taskId 任务ID
     */
    public void submitTask(Long taskId);

    /**
     * 暂停任务
     * 
     * @param taskId 任务ID
     */
    public void pauseTask(Long taskId);

    /**
     * 继续任务
     * 
     * @param taskId 任务ID
     */
    public void resumeTask(Long taskId);

    /**
     * 取消任务
     * 
     * @param taskId 任务ID
     */
    public void cancelTask(Long taskId);

    /**
     * 重试任务
     * 
     * @param taskId 任务ID
     */
    public void retryTask(Long taskId);

    /**
     * 获取任务状态
     * 
     * @param taskId 任务ID
     * @return 任务信息
     */
    public TaskQueue getTaskStatus(Long taskId);

    /**
     * 原子性锁定任务
     * 
     * @param taskId 任务ID
     * @param workerThread 工作线程ID
     * @return 是否锁定成功
     */
    public boolean tryLockTask(Long taskId, String workerThread);

    /**
     * 查询待处理的任务
     * 
     * @param limit 限制数量
     * @return 任务列表
     */
    public List<TaskQueue> selectPendingTasks(int limit);

    /**
     * 查询中断的任务（用于启动恢复）
     * 
     * @return 任务列表
     */
    public List<TaskQueue> selectInterruptedTasks();

    /**
     * 查询需要清理的任务
     * 
     * @param statuses 状态列表
     * @param days 完成后多少天
     * @return 任务列表
     */
    public List<TaskQueue> selectTasksNeedCleanup(List<String> statuses, int days);

    /**
     * 根据文章ID查询任务
     * 
     * @param articleId 文章ID
     * @return 任务
     */
    public TaskQueue selectTaskQueueByArticleId(Long articleId);

    /**
     * 删除指定时间之前的任务
     * 
     * @param statuses 状态列表
     * @param days 天数
     * @return 删除数量
     */
    public int deleteTasksBefore(List<String> statuses, int days);

    /**
     * 插入任务步骤记录
     * 
     * @param taskStep 任务步骤
     * @return 结果
     */
    public int insertTaskStep(TaskStep taskStep);

    /**
     * 查询任务的所有步骤
     * 
     * @param taskId 任务ID
     * @return 步骤列表
     */
    public List<TaskStep> selectTaskStepsByTaskId(Long taskId);
}

